// src/stores/userStore.ts
import { HomeAPI } from "@/api/HomeAPI";
import type { Active, Actives } from "@/types/Active";
import type { Avatars } from "@/types/Avatars";
import type { Banner } from "@/types/Banner";
import type { counts, tags } from "@/types/Home";
import type { Status } from "@/types/Status";
import { defineStore } from "pinia";
type State = {
     //轮播图数据
     banners:{
        result:Banner[],
        status:Status;
     }
     //首页收藏最多文章列表
     popularActive:{
      result:Active[]
      status:Status
     }
     //首页最新修改文章列表
     change_dateActive:{
      result:Active[]
      status:Status
     }
     // 首页无限滚动文章
     homeActives:{
      result:Actives,
      status:Status
     }
     //随机头像
     Via_img_List:{
      result:Avatars[],
      status:Status
     },
     //标签
     tags:{
      result:tags[],
      status:Status;
     },
     counts:{
      result:counts,
      status:Status
     }
};
type Getters = {};

type Actions = {
    //获取轮播图数据
    getBanners():Promise<void>;
    //获取首页收藏最多文章列表
    getpopularActive():Promise<void>;
    //获取首页最新修改文章列表
    getchange_dateActive():Promise<void>;
    //获取首页无限滚动文章
    getActives(page:number):Promise<void>;
    //获取头像
    getImgList():Promise<void>;
     //获取标签
    gettagsList():Promise<void>;
    //获取数量
    getCounts():Promise<void>;
};

export const useHomeStore = defineStore<"home", State, Getters, Actions>(
  "home",
  {
    state: () => ({
        //轮播图
        banners:{
            result:[],
            status:'idle'
        },
        //首页收藏最多文章列表
        popularActive:{
          result:[],
          status:'idle'
         },
         //首页最新修改文章列表
         change_dateActive:{
          result:[],
          status:'idle'
         },
          // 首页无限滚动文章
         homeActives:{
           result:{data:[], pages:1, count:0},
           status:'idle'
         },
         //头像列表
         Via_img_List:{
          result:[],
          status:'idle'
         },
           //标签
         tags:{
         result:[],
         status:'idle'
     },
     counts:{
      result:{
        tagCount:0,
        ArticleCount:0,
        NavTagCount:0,
        HistoryTagCount:0
      },
      status:'idle'
     }
    }),
    
     actions:{
       //获取轮播图数据
        async getBanners(){
          //更新数据加载状态
          this.banners.status = 'loading'
          //捕获错误
          try{
           //发送请求获取数据
           const response = await HomeAPI.getBanners()
           
            // 存储轮播图数据
           this.banners.result = response.data
            // 更新数据加载状态
          this.banners.status = "success";
          }catch(error){
             // 更新数据加载状态
             this.banners.status = "error";
          }
         },
      //获取首页最新修改文章列表
        async getpopularActive(){
             //更新数据加载状态
             this.popularActive.status = 'loading'
             //捕获错误
             try{
              //发送请求获取数据
              const response = await HomeAPI.getPopularActive()             
               // 存储首页收藏最多文章列表
              this.popularActive.result = response.data
               // 更新数据加载状态
             this.popularActive.status = "success";
             }catch(error){
                // 更新数据加载状态
                this.popularActive.status = "error";
             }  
        },
      //获取首页最新修改文章列表
      async getchange_dateActive(){
        //更新数据加载状态
        this.change_dateActive.status = 'loading'
        //捕获错误
        try{
         //发送请求获取数据
         const response = await HomeAPI.getChange_dateActive() 
          // 存储首页最新修改文章列表
         this.change_dateActive.result = response.data
          // 更新数据加载状态
        this.change_dateActive.status = "success";
        }catch(error){
           // 更新数据加载状态
           this.change_dateActive.status = "error";
        }  
       },
       //获取首页无限滚动文章
       async getActives(page){
       // 如果数据已经加载完成, 不再进行加载
       if (this.homeActives.status === "finished") return;
        //更新数据加载状态
        this.homeActives.status = 'loading'
        //捕获错误
        try{
         //发送请求获取数据
         const response = await HomeAPI.getActives(page)

         
          // 重新在本地存储分页数据以及商品数据
          if(page===1){
              // 存储首页初始文章列表
              this.homeActives.result = response.data
          }else{
            // 加载更多
             this.homeActives.result={
              ...response.data,
              data:[ ...this.homeActives.result.data,
                ...response.data.data]
             }
          }
          // 如果当前请求页已经是最后一页或者服务端没有文章数据
          if(page === this.homeActives.result.pages|| response.data.count === 0){
               // 更新加载状态
          this.homeActives.status = "finished";
          }else{
            // 更新数据加载状态
            this.homeActives.status = "success";
          }
         
        }catch(error){
           // 更新数据加载状态
           this.homeActives.status = "error";
        }  
       },
       //获取随机头像列表
       async getImgList(){
        //更新数据加载状态
        this.Via_img_List.status = "loading"
        //捕获错误
        try{
        //发送强求获取头像数据
        const response = await HomeAPI.Avatars_img()
        //更新数据
        this.Via_img_List.result = response.data
        //更新数据状态
        this.Via_img_List.status = 'success'
        }catch(error){
        //更新数据状态
        this.Via_img_List.status = 'error'
        }
       },
       //获取标签
       async gettagsList(){
        //更新数据加载状态
        this.tags.status = 'loading'
        //捕获错误
        try{
         //发送请求获取数据
         const response = await HomeAPI.Tags()
         
          // 存储标签数据
         this.tags.result = response.data
          // 更新数据加载状态
        this.tags.status = "success";
        }catch(error){
           // 更新数据加载状态
           this.tags.status = "error";
        }
       },
       //获取数量
       async getCounts(){
        //更新数据加载状态
        this.counts.status = 'loading'
        //捕获错误
        try{
         //发送请求获取数据
         const response = await HomeAPI.Counts()
         
          // 存储数量数据
         this.counts.result = response.data
          // 更新数据加载状态
        this.counts.status = "success";
        }catch(error){
           // 更新数据加载状态
           this.counts.status = "error";
        }
       },  
     },
  
  }
);